Fix gbfputcstr when using non UTF-8 encoding. (#348)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Tue, 14 May 2019 14:06:59 +0000 (08:06 -0600)
committerGitHub <noreply@github.com>
Tue, 14 May 2019 14:06:59 +0000 (08:06 -0600)
* Fix gbfputcstr when using non UTF-8 encoding.

This restores gbfputcstr from 75d8ec00f^.
That change could result in implicit conversion of
char* data that was specifically encoded as required for
a format to UTF-16, and then explicitly converted from UTF-16
to UTF-8.  While this was inefficient it could also
result in corruption when the data to be written was encoded
in something other than UTF-8.
For example, the Latin1 encoded 'ö' is '\xf6' will
be converted to the UTF-16 replacement character, and that will
be converter to the UTF-8 replacement character, not the original
character.

This resolves a mystery that was noted in the gdb test where some
strings where corrupted when writing gdb versions 1 and 2.

Instead of using function overloading I deleted the version of
gbfputcstr that accepted a QString to write, forcing the user
to specifically convert the data as appropriate.

* increase accuracy of GPS_Math_Deg_To_Semi.

Use rounding of the calculated floating point value before
conversion to an integer to improve accuracy.
This minimizes
abs(GPS_Math_Semi_to_Deg(GPS_Math_Deg_To_Semi(fpvalue)) - fpvalue).
This allows us do some round trip testing from formats that use
a textual representations of degrees, e.g. gpx, to a binary
format that stores integer represetations of angles in semicircle
units, and back.

It is still possible for round trip differences to occur,
but in all our test cases this hasn't been observed.
The value, the number of decimal places printed for the textual
representation, and the size of floating point variables can
all influence this.

Two GPSBabel generated binary reference files are updated.  All changes
in these files are 1 bit changes in latitude or longitude values as
can be expected from the difference between truncation and rounding.

Two GPSBabel generated gpx reference files are deleted as the source
of the round trip test can be compared to the output now.

A gdb test comparison is now enabled as the round trip results now
match.

* enhance gdb test.

adding a roundtrip test with gdb version 3.

easygps.cc
gbfile.cc
gbfile.h
jeeps/gpsmath.cc
lmx.cc
reference/garmin_gpi2.gpx [deleted file]
reference/garmin_gpi_category~gpx.gpi
reference/garmin_gpi_encoding2.gpi.gpx [deleted file]
reference/netstumbler.mps
testo.d/garmin_gpi.test
testo.d/gdb.test

index 8f8ef77948a8ac2d19547329511021945fd442f6..a9ba3224fb6c9a2d4a5799965e0b3ab1fdb662c0 100644 (file)
@@ -181,7 +181,7 @@ ez_disp(const Waypoint* wpt)
     }
     if (!link.url_.isEmpty()) {
       gbfputc(9, file_out);
-      gbfputcstr(link.url_, file_out);
+      gbfputcstr(CSTRc(link.url_), file_out);
     }
   }
   gbfputc(0xff, file_out);
index 10a705216b8c7078c770e4b60b4807a32d2e2227..85633208b9ace3af1cbfd453de59541e6db01b30 100644 (file)
--- a/gbfile.cc
+++ b/gbfile.cc
@@ -1211,16 +1211,19 @@ gbfputflt(const float f, gbfile* file)
  *             return the number of written characters
  */
 int
-gbfputcstr(const QString& s, gbfile* file) 
+gbfputcstr(const char* s, gbfile* file)
 {
-  QByteArray qs = s.toUtf8();
-  int rv =  gbfwrite(qs.constData(), 1, qs.size(), file);
-  gbfputc(0, file);
-  return rv;
+  int len = (s == nullptr) ? 0 : strlen(s);
+  if (len > 0) {
+    return gbfwrite(s, 1, len + 1, file);
+  } else {
+    gbfputc(0, file);
+    return 1;
+  }
 }
 
 /*
- * gbfputcstr: write a pascal string into a stream
+ * gbfputpstr: write a pascal string into a stream
  *             return the number of written characters
  */
 
index 3a1b87bbc33c9da4cfded66cc928f8001a58a4c0..1c4cf89d7b2f4dfcdd7426d2ea7fdb27948c16a8 100644 (file)
--- a/gbfile.h
+++ b/gbfile.h
@@ -127,7 +127,7 @@ int gbfputint32(int32_t i, gbfile* file);
 int gbfputdbl(double d, gbfile* file); // write a double value
 int gbfputflt(float f, gbfile* file);  // write a float value
 
-int gbfputcstr(const QString& s, gbfile* file);        // write string including '\0'
+int gbfputcstr(const char* s, gbfile* file);   // write string including '\0'
 
 int gbfputpstr(const QString& s, gbfile* file);        // write as pascal string
 
index b71654ae5ed46687a467d4d572798206295d463b..1bb3e5ab35ef81112cf0d252bddae5f3e74315f9 100644 (file)
@@ -249,7 +249,7 @@ double GPS_Math_Feet_To_Metres(double v)
 
 int32 GPS_Math_Deg_To_Semi(double v)
 {
-  return ((double)(1U<<31) / 180.0) * v;
+  return round(((double)(1U<<31) / 180.0) * v);
 }
 
 
diff --git a/lmx.cc b/lmx.cc
index 8dd57a5ac3614584bfe41c5e7cdb4e21cb098975..a05bc93faab1b20ae6835c751f470f46e4947411 100644 (file)
--- a/lmx.cc
+++ b/lmx.cc
  * we don't implement that at this time in GPSBabel.
  */
 
+#include <QtCore/QString>               // for QString
+#include <QtCore/QXmlStreamAttributes>  // for QXmlStreamAttributes
+
 #include "defs.h"
-#include "xmlgeneric.h"
-#include <QtCore/QXmlStreamAttributes>
-#include <cstdio>
+#include "gbfile.h"                     // for gbfputc, gbfprintf, gbfclose, gbfopen, gbfputcstr, gbfputs, gbfile, gbfputuint16
+#include "xmlgeneric.h"                 // for cb_cdata, xg_callback, xg_string, cb_end, cb_start, xg_cb_type, xml_deinit, xml_init, xml_read, xg_tag_mapping
+
 
 static gbfile* ofd;
 static Waypoint* wpt_tmp;
@@ -182,7 +185,7 @@ lmx_write_xml(int tag, const QString& data, int indent)
 
   if (binary) {
     gbfputc(0x03, ofd); // inline string follows
-    gbfputcstr(data, ofd);
+    gbfputcstr(CSTR(data), ofd);
   } else {
     char* tmp_ent = xml_entitize(CSTR(data));
     gbfputs(tmp_ent, ofd);
@@ -223,16 +226,12 @@ lmx_print(const Waypoint* wpt)
     gbfputc('\n', ofd);
   }
 
-  char tbuf[100];
-  sprintf(tbuf, "%f", wpt->latitude);
-  lmx_write_xml(0x4B, tbuf, 4); // latitude
+  lmx_write_xml(0x4B, QString::number(wpt->latitude, 'f'), 4); // latitude
 
-  sprintf(tbuf, "%f", wpt->longitude);
-  lmx_write_xml(0x4C, tbuf, 4); // longitude
+  lmx_write_xml(0x4C, QString::number(wpt->longitude, 'f'), 4); // longitude
 
   if (wpt->altitude && (wpt->altitude != unknown_alt)) {
-    sprintf(tbuf, "%f", wpt->altitude);
-    lmx_write_xml(0x4D, tbuf, 4); // altitude
+    lmx_write_xml(0x4D, QString::number(wpt->altitude, 'f'), 4); // altitude
   }
   lmx_end_tag(0x4A, 3); // coordinates
 
diff --git a/reference/garmin_gpi2.gpx b/reference/garmin_gpi2.gpx
deleted file mode 100644 (file)
index 331b105..0000000
+++ /dev/null
@@ -1,521 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.0" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
-  <time>1970-01-01T00:00:00Z</time>
-  <bounds minlat="42.401050944" minlon="-71.126601985" maxlat="42.468654849" maxlon="-71.102972981"/>
-  <wpt lat="42.439992931" lon="-71.120924922">
-    <name>5058ROAD</name>
-    <cmt>ROAD CROSSING</cmt>
-    <desc>ROAD CROSSING</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.438877970" lon="-71.119276956">
-    <name>5066</name>
-    <cmt>5066</cmt>
-    <desc>5066</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.439226909" lon="-71.119688759">
-    <name>5067</name>
-    <cmt>5067</cmt>
-    <desc>5067</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.438916946" lon="-71.116145980">
-    <name>5096</name>
-    <cmt>5096</cmt>
-    <desc>5096</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.443903927" lon="-71.122043990">
-    <name>5142</name>
-    <cmt>5142</cmt>
-    <desc>5142</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.445358858" lon="-71.122844797">
-    <name>5144SUMMIT</name>
-    <cmt>Summit</cmt>
-    <desc>Summit</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.449764973" lon="-71.122319922">
-    <name>5148NANEPA</name>
-    <cmt>Nanepashemet Road Crossing</cmt>
-    <desc>Nanepashemet Road Crossing</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.441726979" lon="-71.121675773">
-    <name>5150TANK</name>
-    <cmt>WATER TANK</cmt>
-    <desc>WATER TANK</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.447297927" lon="-71.121446947">
-    <name>5156</name>
-    <cmt>5156</cmt>
-    <desc>5156</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.449865891" lon="-71.119297827">
-    <name>5179DEAD</name>
-    <cmt>Dead End</cmt>
-    <desc>Dead End</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.454872821" lon="-71.125093997">
-    <name>5224</name>
-    <cmt>5224</cmt>
-    <desc>5224</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.459078860" lon="-71.124987882">
-    <name>5229</name>
-    <cmt>5229</cmt>
-    <desc>5229</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.456468903" lon="-71.124650678">
-    <name>5236BRIDGE</name>
-    <cmt>Bridge</cmt>
-    <desc>Bridge</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.456978858" lon="-71.124473820">
-    <name>5237</name>
-    <cmt>5237</cmt>
-    <desc>5237</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.459277930" lon="-71.124573816">
-    <name>5239ROAD</name>
-    <cmt>Road</cmt>
-    <desc>Road</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.453255868" lon="-71.121210745">
-    <name>5252PURPLE</name>
-    <cmt>Purple Rock Hill</cmt>
-    <desc>Purple Rock Hill</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.454400836" lon="-71.120989798">
-    <name>5254</name>
-    <cmt>5254</cmt>
-    <desc>5254</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.451441940" lon="-71.121745678">
-    <name>5258</name>
-    <cmt>5258</cmt>
-    <desc>5258</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.454403937" lon="-71.120659970">
-    <name>5264</name>
-    <cmt>5264</cmt>
-    <desc>5264</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.457760973" lon="-71.121044951">
-    <name>526708</name>
-    <cmt>526708</cmt>
-    <desc>526708</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.457088996" lon="-71.120312959">
-    <name>526750</name>
-    <cmt>526750</cmt>
-    <desc>526750</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.457387811" lon="-71.119844830">
-    <name>5267OBSTAC</name>
-    <cmt>Obstacle</cmt>
-    <desc>Obstacle</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.456591949" lon="-71.119675767">
-    <name>527614</name>
-    <cmt>527614</cmt>
-    <desc>527614</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.456251979" lon="-71.119355746">
-    <name>527631</name>
-    <cmt>527631</cmt>
-    <desc>527631</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.458147882" lon="-71.119134799">
-    <name>5278</name>
-    <cmt>5278</cmt>
-    <desc>5278</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.458781973" lon="-71.118990798">
-    <name>5278ROAD</name>
-    <cmt>Road</cmt>
-    <desc>Road</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.457733816" lon="-71.117480882">
-    <name>5287WATER</name>
-    <cmt>Reservoir</cmt>
-    <desc>Reservoir</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.459376669" lon="-71.117692944">
-    <name>5289</name>
-    <cmt>5289</cmt>
-    <desc>5289</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.459628964" lon="-71.116523920">
-    <name>5299DEAD</name>
-    <cmt>Dead End</cmt>
-    <desc>Dead End</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.464182936" lon="-71.119827731">
-    <name>5374FIRE</name>
-    <cmt>5374FIRE</cmt>
-    <desc>5374FIRE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.465649853" lon="-71.119398829">
-    <name>5376</name>
-    <cmt>5376</cmt>
-    <desc>5376</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.465758985" lon="-71.119814739">
-    <name>5376BRIDGE</name>
-    <cmt>Bridge</cmt>
-    <desc>Bridge</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.465484897" lon="-71.119147791">
-    <name>5376DEAD</name>
-    <cmt>Dead End</cmt>
-    <desc>Dead End</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.465912877" lon="-71.119327918">
-    <name>5376STREAM</name>
-    <cmt>Stream Crossing</cmt>
-    <desc>Stream Crossing</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.439017948" lon="-71.114455853">
-    <name>6006</name>
-    <cmt>600698</cmt>
-    <desc>600698</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.438593740" lon="-71.114802780">
-    <name>6006BLUE</name>
-    <cmt>6006BLUE</cmt>
-    <desc>6006BLUE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.436756846" lon="-71.113222959">
-    <name>6014MEADOW</name>
-    <cmt>6014MEADOW</cmt>
-    <desc>6014MEADOW</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.438665992" lon="-71.114078835">
-    <name>6016</name>
-    <cmt>Bike Loop Connector</cmt>
-    <desc>Bike Loop Connector</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.441753969" lon="-71.113219690">
-    <name>6029</name>
-    <cmt>6029</cmt>
-    <desc>6029</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.435471984" lon="-71.109663919">
-    <name>6042CROSS</name>
-    <cmt>Crossing</cmt>
-    <desc>Crossing</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.436242700" lon="-71.109074755">
-    <name>6053</name>
-    <cmt>6053</cmt>
-    <desc>6053</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.439249959" lon="-71.107499963">
-    <name>6066</name>
-    <cmt>6066</cmt>
-    <desc>6066</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.439763770" lon="-71.107581938">
-    <name>6067</name>
-    <cmt>6067</cmt>
-    <desc>6067</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.434765976" lon="-71.105873790">
-    <name>6071</name>
-    <cmt>6071</cmt>
-    <desc>6071</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.433303921" lon="-71.106598992">
-    <name>6073</name>
-    <cmt>6073</cmt>
-    <desc>6073</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.439501919" lon="-71.106555993">
-    <name>6077LOGS</name>
-    <cmt>Log Crossing</cmt>
-    <desc>Log Crossing</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.437337963" lon="-71.104771905">
-    <name>6084</name>
-    <cmt>6084</cmt>
-    <desc>6084</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.443108736" lon="-71.112674950">
-    <name>6121DEAD</name>
-    <cmt>Dead End</cmt>
-    <desc>Dead End</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.442195863" lon="-71.110974681">
-    <name>6130</name>
-    <cmt>6130</cmt>
-    <desc>6130</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.442980912" lon="-71.111440966">
-    <name>6131</name>
-    <cmt>6131</cmt>
-    <desc>6131</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.444772879" lon="-71.108881971">
-    <name>6153</name>
-    <cmt>6153</cmt>
-    <desc>6153</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.446792834" lon="-71.108783903">
-    <name>6155DEAD</name>
-    <cmt>Dead End</cmt>
-    <desc>Dead End</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.443591869" lon="-71.106300848">
-    <name>6171</name>
-    <cmt>6171</cmt>
-    <desc>6171</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.447803859" lon="-71.106623970">
-    <name>6176</name>
-    <cmt>6176</cmt>
-    <desc>6176</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.448447673" lon="-71.106157769">
-    <name>6177</name>
-    <cmt>6177</cmt>
-    <desc>6177</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.442992982" lon="-71.105877981">
-    <name>6181CROSS</name>
-    <cmt>Crossing</cmt>
-    <desc>Crossing</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.453414705" lon="-71.106782975">
-    <name>6272</name>
-    <cmt>6272</cmt>
-    <desc>6272</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.453433732" lon="-71.107252948">
-    <name>6272.1</name>
-    <cmt>6272</cmt>
-    <desc>6272</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.458297918" lon="-71.106770989">
-    <name>6278</name>
-    <cmt>6278</cmt>
-    <desc>6278</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.451429954" lon="-71.105412953">
-    <name>6280</name>
-    <cmt>6280</cmt>
-    <desc>6280</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.453844948" lon="-71.105205920">
-    <name>6283</name>
-    <cmt>6283</cmt>
-    <desc>6283</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.459985698" lon="-71.106169755">
-    <name>6289</name>
-    <cmt>6289</cmt>
-    <desc>6289</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.457615966" lon="-71.105115982">
-    <name>6297</name>
-    <cmt>6297</cmt>
-    <desc>6297</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.467109729" lon="-71.113573993">
-    <name>6328</name>
-    <cmt>6328</cmt>
-    <desc>6328</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.462775866" lon="-71.109985868">
-    <name>6353DEAD</name>
-    <cmt>Dead End</cmt>
-    <desc>Dead End</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.464201963" lon="-71.109862989">
-    <name>6354</name>
-    <cmt>6354</cmt>
-    <desc>6354</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.466458958" lon="-71.110066921">
-    <name>635722</name>
-    <cmt>635722</cmt>
-    <desc>635722</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.466556691" lon="-71.109409947">
-    <name>635783</name>
-    <cmt>635783</cmt>
-    <desc>635783</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.463494698" lon="-71.107116994">
-    <name>6373</name>
-    <cmt>6373</cmt>
-    <desc>6373</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.401050944" lon="-71.110240929">
-    <name>6634</name>
-    <cmt>6634</cmt>
-    <desc>6634</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.432620712" lon="-71.106531937">
-    <name>6979</name>
-    <cmt>6979</cmt>
-    <desc>6979</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.431032928" lon="-71.107882932">
-    <name>6997</name>
-    <cmt>6997</cmt>
-    <desc>6997</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.465686901" lon="-71.107359985">
-    <name>BEAR HILL</name>
-    <cmt>BEAR HILL TOWER</cmt>
-    <desc>BEAR HILL TOWER</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.430949947" lon="-71.107627871">
-    <name>BELLEVUE</name>
-    <cmt>BELLEVUE</cmt>
-    <desc>BELLEVUE</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.458515931" lon="-71.103645964">
-    <name>DARKHOLLPO</name>
-    <cmt>Dark Hollow Pond</cmt>
-    <desc>Dark Hollow Pond</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.451203978" lon="-71.126601985">
-    <name>GATE14</name>
-    <cmt>Gate 14</cmt>
-    <desc>Gate 14</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.458498916" lon="-71.122077769">
-    <name>GATE16</name>
-    <cmt>Gate 16</cmt>
-    <desc>Gate 16</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.459375747" lon="-71.119237980">
-    <name>GATE17</name>
-    <cmt>Gate 17</cmt>
-    <desc>Gate 17</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.466352927" lon="-71.119239992">
-    <name>GATE19</name>
-    <cmt>Gate 19</cmt>
-    <desc>Gate 19</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.468654849" lon="-71.107696854">
-    <name>GATE21</name>
-    <cmt>Gate 21</cmt>
-    <desc>Gate 21</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.456717929" lon="-71.102972981">
-    <name>GATE24</name>
-    <cmt>Gate 24</cmt>
-    <desc>Gate 24</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.430846766" lon="-71.107689897">
-    <name>GATE5</name>
-    <cmt>Gate 5</cmt>
-    <desc>Gate 5</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.431239961" lon="-71.109235939">
-    <name>GATE6</name>
-    <cmt>Gate 6</cmt>
-    <desc>Gate 6</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.434979966" lon="-71.109941863">
-    <name>PANTHRCAVE</name>
-    <cmt>Panther Cave</cmt>
-    <desc>Panther Cave</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.453414705" lon="-71.106781969">
-    <name>SHEEPFOLD</name>
-    <cmt>Sheepfold Parking Lot</cmt>
-    <desc>Sheepfold Parking Lot</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-  <wpt lat="42.455955679" lon="-71.107482864">
-    <name>SOAPBOX</name>
-    <cmt>Soap Box Derby Track</cmt>
-    <desc>Soap Box Derby Track</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-</gpx>
index dcfda1bd8cc339fe6fa8def8732213adbf92bb81..d72f6bda6df28cc95d639249d81516c753bf073a 100644 (file)
Binary files a/reference/garmin_gpi_category~gpx.gpi and b/reference/garmin_gpi_category~gpx.gpi differ
diff --git a/reference/garmin_gpi_encoding2.gpi.gpx b/reference/garmin_gpi_encoding2.gpi.gpx
deleted file mode 100644 (file)
index f2b1584..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1">
-  <metadata>
-    <time>1970-01-01T00:00:00Z</time>
-    <bounds minlat="50.849999869" minlon="4.349999959" maxlat="50.849999869" maxlon="4.349999959"/>
-  </metadata>
-  <wpt lat="50.849999869" lon="4.349999959">
-    <name>€</name>
-    <cmt>™</cmt>
-    <desc>™</desc>
-    <sym>Waypoint</sym>
-  </wpt>
-</gpx>
index c313182348d1eae58d4d4ff2e7046dd3296e030e..1862bedc55577763f416c172fd16064477a3fffc 100644 (file)
Binary files a/reference/netstumbler.mps and b/reference/netstumbler.mps differ
index a0d9a083a2087f7aea5e95c2170a672b508f9ca8..15df6508e2e288040c7f52d3b5ed14b55b2adb6d 100644 (file)
@@ -6,7 +6,7 @@ compare ${REFERENCE}/garmin_gpi.gpx ${TMPDIR}/garmin_gpi.gpx
 
 gpsbabel -i gpx -f ${REFERENCE}/garmin_gpi.gpx -o garmin_gpi -F ${TMPDIR}/garmin_gpi.gpi
 gpsbabel -i garmin_gpi -f ${TMPDIR}/garmin_gpi.gpi -o gpx -F ${TMPDIR}/garmin_gpi2.gpx
-compare ${REFERENCE}/garmin_gpi2.gpx ${TMPDIR}/garmin_gpi2.gpx
+compare ${REFERENCE}/garmin_gpi.gpx ${TMPDIR}/garmin_gpi2.gpx
 
 gpsbabel -i gpx -f ${REFERENCE}/track/vitovtt-sample.gpx -x transform,wpt=trk -o garmin_gpi -F ${TMPDIR}/garmin_gpi3a.gpi
 gpsbabel -i garmin_gpi -f ${TMPDIR}/garmin_gpi3a.gpi -o garmin_gpi -F ${TMPDIR}/garmin_gpi3b.gpi
@@ -25,7 +25,7 @@ gpsbabel -i garmin_gpi -f ${REFERENCE}/garmin_gpi_encoding.gpi -o gpx,gpxver=1.1
 compare ${REFERENCE}/garmin_gpi_encoding.gpx ${TMPDIR}/garmin_gpi_encoding.gpx
 gpsbabel -i gpx -f ${REFERENCE}/garmin_gpi_encoding.gpx  -o garmin_gpi -F ${TMPDIR}/garmin_gpi_encoding.gpi
 gpsbabel -i garmin_gpi -f ${TMPDIR}/garmin_gpi_encoding.gpi -o gpx,gpxver=1.1 -F ${TMPDIR}/garmin_gpi_encoding2.gpi.gpx
-compare ${REFERENCE}/garmin_gpi_encoding2.gpi.gpx ${TMPDIR}/garmin_gpi_encoding2.gpi.gpx
+compare ${TMPDIR}/garmin_gpi_encoding.gpx ${TMPDIR}/garmin_gpi_encoding2.gpi.gpx
 
 # check category encoding
 gpsbabel -i gpx -f ${REFERENCE}/garmin_gpi.gpx -o garmin_gpi,category="Vinícolas",hide -F ${TMPDIR}/garmin_gpi_category~gpx.gpi
index eae8c50138e74276d988b8aea37dc732737c18d7..847518388327a7754b66488bd826e8c670a16d16 100644 (file)
@@ -6,18 +6,22 @@ rm -f ${TMPDIR}/gdb-*
 gpsbabel -i gdb,via -f ${REFERENCE}/gdb-sample.gdb -o gpx -F ${TMPDIR}/gdb-sample.gpx
 compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample.gpx
 
-# In NEW_STRINGS, this next command writes a slightly malformed route section, I THINK.
-# This results in the subsequent read failing, but replacing the GDB write with an "old"
-# GPSBabel restores harmony, so I think the problem is actually in the write.
+# check round trip from gdb to gdb for corruption.
+# The Latin1 encoded character string "Völkerschlachtdenkmal" in the version 2 file
+# gdb-sample.gdb can't be converted to a Qstring using the implicit fromUtf8()
+# without corruption as 'ö' is '\xf6' in Latin1 which is illegal in UTF-8.
+gpsbabel -i gdb,via -f ${REFERENCE}/gdb-sample.gdb -o gdb,ver=2 -F ${TMPDIR}/gdb-sample2.gdb
+gpsbabel -i gdb -f ${TMPDIR}/gdb-sample2.gdb -o gpx -F ${TMPDIR}/gdb-sample2.gpx
+compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample2.gpx
+
+# again with gdb version 3.
+gpsbabel -i gdb,via -f ${REFERENCE}/gdb-sample.gdb -o gdb,ver=3 -F ${TMPDIR}/gdb-sample3.gdb
+gpsbabel -i gdb -f ${TMPDIR}/gdb-sample3.gdb -o gpx -F ${TMPDIR}/gdb-sample3.gpx
+compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample3.gpx
+
 gpsbabel -i gpx -f ${REFERENCE}/gdb-sample.gpx -o gdb,ver=1 -F ${TMPDIR}/gdb-sample.gdb
 gpsbabel -i gdb -f ${TMPDIR}/gdb-sample.gdb -o gpx -F ${TMPDIR}/gdb-sample_v2.gpx
-
-# FP jitter...
-# compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample_v2.gpx
+compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample_v2.gpx
 
 gpsbabel -i gdb,via -f ${REFERENCE}/gdb-sample-v3.gdb -o gpx -F ${TMPDIR}/gdb-sample_v3.gpx
 compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample_v3.gpx
-#
-# Because of Garmin coordinates storage gpx is not good for this test
-# compare ${REFERENCE}/gdb-sample.gpx ${TMPDIR}/gdb-sample_v2.gpx
-